'use strict'

const titbit = require('titbit')
const { cookie, session } = require('titbit-toolkit')

const app = new titbit({
    debug: true
})

// 用use添加的都是顺序执行的
// 在c中可以拿到用户请求的路由routepath /content/:id和服务端存在的path /content/1234
app.use(async (c,next)=>{
    // querystring：查询字符串：对http请求所带的数据进行解析
    if(c.query.key !== '12345'){
        return c.status(403).send('deny')
    }
    // 如果没有await next()，那么这个函数到此为止不再继续执行
    await next()
},{group:'session'})//由于和'/sess/:x/:y'处于同一个分组，所以只有路由请求和/sess/:x/:y一致才会执行

app.use(async (c,next)=>{
    let startTime=Date.now()
    console.log('time start')
    await next()//执行完await next()会执行下一个app.use
    let endTime=Date.now()
    console.log(endTime-startTime,'ms')
})

// 先启用Cookie，在启用session
app.use(new cookie).use(new session)

app.use(async (c,next)=>{
    console.log('home start')
    await next()
    console.log('home end')
},{group:'home',method:['GET']})//只有c.group为home，请求方法为get时才会执行

// Cookie通过在客户端记录信息确定用户身份，Session通过在服务器端记录信息确定用户身份。
// Cookie：客户端存储的一种方案
// session：保存在服务器中，每次客户端发起请求时，通过携带的Cookie值（即为session文件的名字）判断用户是否已经进行过登录
//发送的内容可以存储在c盘中：用户->公用->sess里的文件里，请求消息头里的Cookie值即为文件名，通过Cookie值找到文件
app.get('/', async c => {
    c.send('ok')
},{name:'主页',group:'home'})//第二个参数为该路由的标记，上面的use通过c.name可以获取到name值

app.get('/sess/:x/:y', async c => {
    c.setSession("x", c.param.x)
    c.setSession('y', c.param.y)

    c.send(c.getSession())
},{group:'session'})

app.run(9978)